package Authorization;

import Source.MsgKeys;
import Source.NotificationsStorage;
import java.io.IOException;
import java.util.Scanner;


/**
 * Created with IntelliJ IDEA.
 * Authorization.User: Инесса
 * Date: 26.10.13
 * Time: 15:46
 * To change this template use File | Settings | File Templates.
 */
public class UserController {

    private Scanner scanner;
    private UserStorage userStorage;
    private NotificationsStorage notifications;
    private final String EMPTY = "";

    /**
     * Инициализируем хранилище пользователей в конструкторе класса
     * @throws IOException
     */
    public UserController() throws IOException {
        this.userStorage = new UserStorage();
        this.scanner = new Scanner(System.in);
        this.notifications = new NotificationsStorage();
    }

    /**
     * Метод просит выбрать войти или зарегистрироваться и вызывает соответствующее действие
     * @return пользователя готового к тестированию
     * @throws IOException
     */
    public User helloUser() throws IOException {
        notifications.notify(MsgKeys.START_MSG);
        int choice = Integer.parseInt(scanner.nextLine());
        switch (choice){
            case 1:
                return createUser();
            case 2:
                return loginUser();
        }
        return null;
    }

    /**
     * Регистрация нового пользователя, добавление его в хранилище пользователей
     * @return зарегистрированного пользователя
     * @throws IOException
     */
    private User createUser() throws IOException {
        String newLogin;
        String newPassword;
        User createdUser;
        newLogin = getValidLogin();
        newPassword = getValidPass();
        createdUser = new User(newLogin,newPassword);
        userStorage.createUser(createdUser);
        return createdUser;
    }

    private String getValidPass() {
        String newPassword;
        do{
            notifications.notify(MsgKeys.ENTER_PASS_MSG);
            newPassword = scanner.nextLine();
        }while (newPassword.equals(EMPTY));
        return newPassword;
    }

    private String getValidLogin() throws IOException {
        String newLogin;
        do{
            notifications.notify(MsgKeys.ENTER_LOG_MSG);
            newLogin = scanner.nextLine();

        } while ((userStorage.isUserExist(newLogin))||(newLogin.equals(EMPTY)));
        return newLogin;
    }

    /**
     * Производит вход пользователя в систему
     * @return залогиненого пользователя
     * @throws IOException
     */
    private User loginUser()throws IOException{
        User userData;
        String login,password;

        do {
            notifications.notify(MsgKeys.ENTER_LOG_MSG);
            login = scanner.nextLine();
            notifications.notify(MsgKeys.ENTER_PASS_MSG);
            password = scanner.nextLine();
            userData = new User(login,password);
        } while (!userStorage.isUserValid(userData));
        return  userData;
    }
}
